package com.cfpamf.ms.insur.wx.request;

import com.cfpamf.ms.insur.wx.model.WxPayModel;
import com.cfpamf.ms.insur.wx.response.WxPayResponse;
import com.cfpamf.ms.insur.wx.util.WXPayConstants;

/**
 * 微信支付 参数结构
 *
 * @param <R> WxPayModel 请求参数
 * @param <T> WxPayResponse  返回结果
 */
public interface WechatPayRequest<R extends WxPayModel, T extends WxPayResponse> {
    /**
     * 返回 WxPayModel
     *
     * @return
     */
    R getModel();

    /**
     * 设置 WxPayModel，设置请求参数
     *
     * @param model
     */
    void setModel(R model);

    /**
     * 获取支付接口 url后缀
     *
     * @return
     */
    String getApiAction();

    /**
     * 获取model.class
     *
     * @return
     */
    Class<R> getObjectClass();

    /**
     * 获取response.class
     *
     * @return
     */
    Class<T> getResponseClass();

    /**
     * 是否需要带上支付凭证
     *
     * @return
     */
    boolean requireCert();

    default WXPayConstants.SignType getSignType() {
        return WXPayConstants.SignType.MD5;
    }

}
